import React, { useEffect } from 'react';

import { sortTree, data } from '../utils/tools';

/**
 * 跳跃游戏 II
 * 给定一个非负整数数组，你最初位于数组的第一个位置（0）。
 * 数组中的每个元素代表你在该位置可以（能够）跳跃的最大长度。
 * 你的目标是使用最少的跳跃次数到达数组的最后一个位置。
 *
 */
const jumpII = (nums = []) => {
  let result = 0;
  if (nums.length === 1) return result;
  let cur = 0, // !当前能够跳跃到的最远位置
    next = 0; // !下一步能跳跃到的最远位置

  for (let i = 0; i < nums.length; i++) {
    // !覆盖范围内最大的一步
    next = Math.max(i + nums[i], next);
    // console.log('i', i, 'cur', cur, next);

    // !当 i 达到覆盖范围时，进行跳跃
    if (i === cur) {
      // console.log('执行的次数');
      if (cur !== nums.length - 1) {
        result++;
        cur = next;
        if (cur >= nums.length - 1) {
          break;
        }
      } else if (cur === nums.length - 1) {
        break;
      }
    }
  }

  console.log('跳跃最小步数', result);
  return result;
};

export default function Algorithm() {
  useEffect(() => {
    // !跳跃游戏II
    jumpII([2, 3, 1, 1, 4]);
  }, []);

  // !尾调用
  useEffect(() => {
    const sortedData = sortTree(data, null);
    console.log('sortedData -->', sortedData);
  }, []);

  return (
    <div className='my__component__wrapper'>
      Algorithm 算法合集
      <a href=''>贪心算法</a>
    </div>
  );
}
